#ifndef DEFINE_H
#define DEFINE_H

// Constants for the simulator:

// constants for commands or instructions:
#define INSRTUCTIONS_TYPES_CNT 14
#define MAX_LABEL_LENGTH 32
#define MAX_CMD_LINE_LENGTH 100

// constants for memory:
#define INSTURCTIONS_OFFSET 0xF00000
#define CHARS_IN_LINE 25 //For reading mem_init. Assuming is of a format "XX XX XX XX XX XX XX XX\r\n"
#define BYTES_PER_LINE 8 //For reading mem_init
#define MAX_MEMORY_SIZE 0x1000000 //16 MB memory size
#define NUM_OF_CACHES_PER_LEVEL 2
#define L1_CACHE_WAYS 1
#define L2_CACHE_WAYS 2
#define NUM_BYTES_IN_WORD 4
#define NUM_BITS_IN_WORD 32


// constant for configurations:
#define CONFIG_NUM 17
#define MAX_CONFIG_LINE_LENGTH 100

// constant for registers:
#define REGISTER_NUM 32

// macros:
#define inst_address(x) x*NUM_BYTES_IN_WORD + INSTURCTIONS_OFFSET
#define address_dif(x,y) abs(x-y) / 4

#endif